package tool

import (
	"bufio"
	"fmt"
	"openmanus/llm"
	"os"
	"strings"
)

// AskHuman 向人类询问信息的工具
type AskHuman struct {
	*ToolBase
}

// NewAskHuman 创建新的向人类询问工具
func NewAskHuman() *AskHuman {
	parameters := llm.Schema{
		Type: "object", // 整体参数类型为对象
		Properties: map[string]any{
			"question": map[string]any{
				"type":        "string",   // 参数类型为字符串
				"description": "向人类提出的问题", // 参数描述
			},
		},
		Required: []string{"question"}, // 标记question为必选参数
	}

	return &AskHuman{
		ToolBase: NewToolBase(
			"ask_human",
			"向人类用户询问信息。",
			parameters,
		),
	}
}

// Execute 执行询问人类工具
func (a *AskHuman) Execute(args map[string]interface{}) (*ToolResult, error) {
	question, ok := args["question"].(string)
	if !ok || question == "" {
		return nil, fmt.Errorf("问题不能为空")
	}

	// 向用户显示问题并获取回答
	fmt.Printf("[%s] %s\n", a.Name(), question)
	fmt.Print("请输入您的回答: ")

	// 读取用户输入
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	answer := scanner.Text()

	// 移除回答中的空白字符
	answer = strings.TrimSpace(answer)

	if answer == "" {
		answer = "用户未提供回答"
	}

	//fmt.Println(answer)
	return SuccessResponse(answer), nil
}

// Cleanup 清理工具资源
func (a *AskHuman) Cleanup() error {
	return nil
}
